create or replace type body m4o_module as 
  -- ===========================================================================
  member function proc(i_name   in varchar2)
  return m4o_context
  is
  begin
    m4o_dbg.p(
      i_str     => '\ '||self.v_name||'.'||i_name||'()',
      i_uplevel => 2);
    return new m4o_context(i_name => i_name);
  end;
  -- ===========================================================================
  member function proc(i_name   in varchar2,
                       i_args   in m4o_v2tab)
  return m4o_context
  is
  begin
    if m4o_dbg.p_level = 1 then
      m4o_dbg.p(
        i_str     => '\ '||self.v_name||'.'||i_name||'(...)',
        i_uplevel => 2);
    elsif m4o_dbg.p_level > 1 then
      m4o_dbg.p(
        i_str     => '\ '||self.v_name||'.'||i_name||'('||
                     m4o_v2.join(i_args,',')||
                     ')',
        i_uplevel => 2);
    end if;

    return new m4o_context(i_name => i_name);
  end;
end;
/
